package com.dreamwhale.machinery.pay.ali.server;

import com.alipay.api.AlipayApiException;
import com.dreamwhale.machinery.config.DataResult;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;

public interface AliPayService {


    /**
     * @param : orderId     订单号
     * @param : body        内容
     * @param : money
     * @param : backJsonInfo
     * @return :
     * @MethodName : orderPay
     * @Description :
     * @Author : DragonUncle
     * @Data : 13:44 2020/7/10
     */
    String orderPay(String orderId, String body, BigDecimal money, String backJsonInfo) throws AlipayApiException;

    /**
     * @param : money 充值金额
     * @param : money 充值用户
     * @return :
     * @MethodName : recharge
     * @Description : 充值
     * @Author : Dragon
     * @Data : 16:41 2020/6/21
     */
    DataResult recharge(BigDecimal money, Integer userId);

    /**
     * @param : orderId 订单号
     * @param : userId 用户id
     * @return :
     * @MethodName : order
     * @Description : 结算订单
     * @Author : Dragon
     * @Data : 16:41 2020/6/21
     */
    DataResult order(String orderId, Integer userId);

    /**
     * @param : orderId 订单号
     * @param : userId 用户id
     * @return :
     * @MethodName : orderApply
     * @Description : 报名
     * @Author : Dragon
     * @Data : 16:41 2020/6/21
     */
    DataResult orderApply(String orderId, Integer userId, Integer pid);

    /**
     * @param : request 请求信息
     * @return :
     * @MethodName : notify
     * @Description : 支付回调
     * @Author : Dragon
     * @Data : 16:42 2020/6/21
     */
    String notify(HttpServletRequest request, HttpServletResponse response);

    /**
     * @param : request 请求信息
     * @return :
     * @MethodName : rsaCheckV1
     * @Description : 校验秘钥是否正确
     * @Author : Dragon
     * @Data : 16:42 2020/6/21
     */
    Boolean rsaCheckV1(HttpServletRequest request);

    /**
     * @param : orderId 订单id
     * @param : reason  原因
     * @return :
     * @MethodName : refund
     * @Description : 退款
     * @Author : Dragon
     * @Data : 19:00 2020/6/23
     */
    DataResult refund(String orderId, String reason);

    /**
     * @param : payOrderId 支付订单
     * @param : userId      支付的用户
     * @return :
     * @MethodName : vipRecharge
     * @Description : vip充值
     * @Author : DragonUncle
     * @Data : 16:20 2020/7/8
     */
    DataResult vipRecharge(String payOrderId, Integer userId);
}
